package com.qf.mybatisplus.config.rabbitMQConfig;


import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;

//@Configuration
public class RabbitMQConfig {


    @Bean
    public Queue helloQueue(){
        Queue queue = new Queue("helloQueue",true);
        //显式声明邮件队列
        return queue;
    }

    @Bean
    public Queue simpleQueue(){
        return new Queue("simpleQueue",true);
    }

    @Bean
    public Queue confirmQueue(){

        return new Queue("confirmQueue");
    }

    @Bean
    public Queue noRepeatQueue(){

        return new Queue("boot-queue");
    }

    @Bean
    public Queue workQueue(){
        return new Queue("work");
    }


    @Bean
    public DirectExchange ttlDirectExchange(){
        return new DirectExchange(RabbitMQCommonConfig.TTL_DIRECT_EXCHANGE);
    }

    @Bean
    public Queue ttlDirectQueue(){
        // 设置  Queue 的属性
        HashMap<String, Object> map = new HashMap<>();
        //设置 queue 的 ttl 为 20 秒 ，则 进入该队列的消息的 过期时间都为 20秒
        map.put("x-message-ttl",20000);

        // 设置 死信队列的 属性    没有消费者消费 导致消息过期了  过期之后 投递到死信队列中
        map.put("x-dead-letter-exchange",RabbitMQCommonConfig.DLX_DIRECT_EXCHANGE);
        map.put("x-dead-letter-routing-key",RabbitMQCommonConfig.DLX_DIRECT_ROUTINGKEY);
        map.put("x-max-length",10);
        return new Queue(RabbitMQCommonConfig.TTL_DIRECT_QUEUE,true,false,false,map);
    }


    @Bean
    public Binding ttlDirectBinding(){
        return BindingBuilder.bind(ttlDirectQueue()).to(ttlDirectExchange()).with(RabbitMQCommonConfig.TTL_DIRECT_ROUTINGKEY);
    }

}
